import { _decorator, instantiate, Node, Sprite, UITransform, Vec2, Vec3 } from 'cc';
const { ccclass, property } = _decorator;

// import TipPanel from "../UI/TipPanel";

@ccclass('CommonFunction')
export default class CommonFunction {
    public static IsNullOrUndefined(obj) {
        // if (obj === null || obj === undefined) {
        // return true;
        // } else {
        // return false;
        // }
    }
    //    // 深拷贝
    public static DeepCopy(obj) {
        //        // 只拷贝对象
        // if (typeof obj !== 'object') return;
        //        // 根据obj的类型判断是新建一个数组还是一个对象
        // var newObj = obj instanceof Array ? [] : {};
        // for (var key in obj) {
        //            // 遍历obj,并且判断是obj的属性才拷贝
        // if (obj.hasOwnProperty(key)) {
        //                // 判断属性值的类型，如果是对象递归调用深拷贝
        // newObj[key] = typeof obj[key] === 'object' ? CommonFunction.DeepCopy(obj[key]) : obj[key];
        // }
        // }
        // return newObj;
    }
    //    //Clone对象
    public static Clone(obj): any {
        // let ret = Object.assign({}, obj);
        // return ret;
    }
    //    /**
    //     * Camera移动到
    //     * @param {*} node 
    //     */
    //    // public static CameraMoveToNode(node: Node): Vec3 {
    //    // const camera_Scene = CameraManager.Instance.Camera_Scene;
    //    // const camera_UI = CameraManager.Instance.Camera_UI;
    //    // const target = node;
    //    // const worldPos = target.convertToWorldSpaceAR(v2(0, 0 - 100));
    //    // const worldPos = target.convertToWorldSpaceAR(v2(0, 0));
    //    // camera_Scene.node.position = v3(camera_Scene.node.parent.convertToNodeSpaceAR(worldPos));
    //    // camera_UI.node.position = v3(camera_UI.node.parent.convertToNodeSpaceAR(worldPos));
    //    // return camera_Scene.node.position;
    //    // }
    //    /**
    //     * 得到一个节点的世界坐标
    //     * node的原点在左下边
    //     * @param {*} node 
    //     */
    public static localConvertWorldPoint(node: Node): Vec2 {
        // if (node) {
        // return node.convertToWorldSpace(v2(0, 0));
        // }
        return null;
    }
    //    //销毁子物体
    public static DestroyAllChildren(parent: Node) {
        // for (var i = 0; i <= parent.childrenCount - 1; i++) {
        // var child: Node = parent.children[i];
        // child.destroy();
        // }
    }
    //    //设置所有子物体可见或者不可见
    public static SetAllChildrenAtive(parent: Node, active: boolean) {
        // for (var i = 0; i <= parent.childrenCount - 1; i++) {
        // var child: Node = parent.children[i];
        // child.active = active;
        // }
    }
    public static GetFreeChild(parent: Node): Node {
        var c: Node = null;
        for (var i = 0; i <= parent.children.length - 1; i++) {
            var child = parent.children[i];
            if (child.active == false) {
                c = child;
                break;
            }
        }

        if (c == null) {
            var node: Node = instantiate(parent.children[0]);
            node.parent = parent;
            node.setPosition(0, 0);
            c = node;
        }

        return c;
    }
    public static SetFirstSiblingIndex(_node: Node) {
        // _node.setSiblingIndex(0);
    }
    public static SetLastSiblingIndex(_node: Node) {
        // _node.setSiblingIndex(_node.parent.children.length - 1);
    }
    
    //    //设置父物体，子物体世界坐标不变
    public static SetParent(_child: Node, _parent: Node) {
        const startPst = _parent.getComponent(UITransform).convertToNodeSpaceAR(_child.getComponent(UITransform).convertToWorldSpaceAR(Vec3.ZERO));
        _child.parent = _parent;
        _child.setPosition(startPst);
    }

    //    //延时函数
    public static DelayFunction(_callback: Function, _complete: Function, _loop: number = 1, _duration: number = 1) {
        // if (_callback) {
        // _callback();
        // }

        // if (_loop <= 1) {
        // if (_complete) {
        // _complete();
        // }
        // return;
        // }

        // let count = 1;
        // let callback = function () {
        // if (_callback) {
        // _callback();
        // }

        // if (count >= _loop - 1) {
        //                // GameManager.Instance.unschedule(callback);

        // if (_complete) {
        // _complete();
        // }
        // }

        // count++;
        // }
        //        // GameManager.Instance.schedule(callback, _duration);
    }
    //    // 将时间转换为"00:00"格式
    public static FormatTime(time) {
        // var minute: any = (Math.floor(time / 60) % 60)
        // var second: any = (time % 60)

        // if (minute.toString().length <= 1) {
        // minute = "0" + minute.toString();
        // }
        // if (second.toString().length <= 1) {
        // second = "0" + second.toString();
        // }

        // return minute + ":" + second;
    }
    //    // 比较两个数组是否相等
    public static CompareArray(_array1: any, _array2: any) {
        // let isSame: boolean = false;

        // if (_array1.length != _array2.length) {
        // return false;
        // }

        // let count = 0;
        // for (let index = 0; index < _array1.length; index++) {
        // const element1 = _array1[index];
        // const element2 = _array2[index];
        // if (element1 === element2) {
        // count++;
        // }
        // }

        // if (count === _array1.length) {
        // isSame = true;
        // }

        // return isSame;
    }
    //    // ArrayEqual(arr1, arr2) {
    //    //     if (arr1 === arr2) return true;
    //    //     if (arr1.length != arr2.length) return false;
    //    //     for (var i = 0; i < arr1.length; ++i) {
    //    //         if (arr1[i] !== arr2[i]) return false;
    //    //     }
    //    //     return true;
    //    // }
    public static Indexof(array, obj) {
        // for (let index = 0; index < array.length; index++) {
        // const element = array[index];
        // if (obj === element) {
        // return index;
        // }
        // }
        // return -1;
    }
    //    // 短振动
    public static VibrateShort() {
        // if (sys.platform === sys.WECHAT_GAME) {
        // wx.vibrateShort();
        // }
        // else {
        // if (window.navigator && window.navigator.vibrate) {
        // window.navigator.vibrate(15);
        // }
        // }
    }
    //    // 长振动
    public static VibrateLong() {
        // if (sys.platform === sys.WECHAT_GAME) {
        // wx.vibrateLong();
        // }
        // else {
        // if (window.navigator && window.navigator.vibrate) {
        // window.navigator.vibrate(15);
        // }
        // }
    }
    //    // 有#的情况
    public static GetQueryStringhash(key) {
        // let after = window.location.search;
        // if (after.indexOf('?') === -1) return null; //如果url中没有传参直接返回空
        //        //key存在先通过search取值如果取不到就通过hash来取
        // after = after.substr(1) || window.location.hash.split("?")[1];
        // if (after) {
        // let reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
        // let r = after.match(reg);
        // if (r != null) {
        // return decodeURIComponent(r[2]);
        // }
        // else {
        // return null;
        // }
        // }
    }
    //    // 没有#情况 
    public static GetQueryString() {
        // let data = {};
        // let src = window.location.href;
        // let index = src.indexOf("?");
        // if (index === -1) {
        // return data;
        // }
        // let dataStr = src.substring(src.indexOf("?") + 1);
        // let dataArray = dataStr.split("&");
        // dataArray.forEach((str) => {
        // let param = str.split("=");
        // data[param[0]] = param[1];
        // })
        // return data;
    }
    public static shuffle(array) {
        // var m = array.length,
        // t, i;
        //        // 使用sort()进行一个随机排序
        // while (m) {
        // i = Math.floor(Math.random() * m--);
        // t = array[m];
        // array[m] = array[i];
        // array[i] = t;
        // }
        // return array;
    }
    public static pickRandom(arr, num) {
        // var shuffled = CommonFunction.shuffle(arr.slice()); // 创建原数组的一个副本并进行随机排序
        // return shuffled.slice(0, num); // 返回前num个元素
    }
    public static SetFrame(图片, maxWidth = 100, maxHeight = 100) {
        const sprite = 图片.getComponent(Sprite);
        if (!sprite || !sprite.spriteFrame) return;

        // console.log(`sprite`, sprite);

        // 获取原始纹理尺寸
        // const texture = sprite.spriteFrame.getTexture();
        const originalWidth = 图片.node.getComponent(UITransform).width; // texture.width;
        const originalHeight = 图片.node.getComponent(UITransform).height; //texture.height;

        // console.log(`texture`, texture);

        // 计算保持比例的新尺寸
        // const maxWidth = 100;
        // const maxHeight = 100;
        let width = originalWidth;
        let height = originalHeight;

        // console.log(`width-height`, width, height);

        // 如果宽度超过最大宽度
        if (width > maxWidth) {
            const ratio = maxWidth / width;
            width = maxWidth;
            height = height * ratio;
        }

        // 如果高度仍然超过最大高度
        if (height > maxHeight) {
            const ratio = maxHeight / height;
            height = maxHeight;
            width = width * ratio;
        }

        // 设置节点尺寸
        图片.node.getComponent(UITransform).width = width;
        图片.node.getComponent(UITransform).height = height;
    }
}